import { getUserInfo, login, getUserInfoById } from '@/api/user'
// 利用存到Cookie里来实现数据持有化
import { getToken, setToken, removeToken } from '@/utils/auth'

const state = {
  // 获取token令牌，进行身份验证
  token: getToken() || '',
  // 用户信息
  userInfo: {}
}
const mutations = {
  // 修改token值
  setToken(state, token) {
    state.token = token
    // 再存一份存到Cookie
    setToken(token)
  },
  // 删除token值
  removeToken(state) {
    // 删除vuex里的token
    state.token = ''
    // 删除Cookie
    removeToken()
  },
  // 修改用户信息
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  // 删除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  }

}
const actions = {
  // 发送登录异步请求
  async login(context, data) {
    const res = await login(data)
    // 如果请求成功，把token存到vuex里
    context.commit('setToken', res)
    // 存一份当前时间到本地存储
    localStorage.setItem('time', Date.now())
  },
  // 发送获取用户信息请求
  async getUserInfo(context) {
    const res = await getUserInfo()
    // 因为上面获取的数据不完全，所以要通过返回来的userId来获取详情
    const detail = await getUserInfoById(res.userId)
    // 合并两次请求返回来的数据
    context.commit('setUserInfo', { ...res, ...detail })
  },
  // 点击退出登录
  logout(context) {
    context.commit('removeToken')
    context.commit('removeUserInfo')
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
